From 75b842b71f14897ae0b2c83930dd2c22fdd0a66c Mon Sep 17 00:00:00 2001 From: Morten Welinder Date: Sun, 14 Mar 2004 20:20:03 +0000 Subject: [PATCH] Don't turn "/" into "". (gtk_file_system_unix_get_folder): Use the same 2004-03-14 Morten Welinder * gtk/gtkfilesystemunix.c (get_parent_dir): Don't turn "/" into "". (gtk_file_system_unix_get_folder): Use the same value for lookup as for insertion. Make sure we have a directory. --- ChangeLog | 5 +++++ ChangeLog.pre-2-10 | 5 +++++ ChangeLog.pre-2-4 | 5 +++++ ChangeLog.pre-2-6 | 5 +++++ ChangeLog.pre-2-8 | 5 +++++ gtk/gtkfilesystemunix.c | 24 +++++++++++++++++++++--- 6 files changed, 46 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0af7fb4ecd..a1fe12811a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2004-03-14 Morten Welinder + * gtk/gtkfilesystemunix.c (get_parent_dir): Don't turn "/" into + "". + (gtk_file_system_unix_get_folder): Use the same value for lookup + as for insertion. Make sure we have a directory. + * gtk/gtkfilechooserdefault.c (error_dialog): Don't crash on NULL path; don't crash on NULL error. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 0af7fb4ecd..a1fe12811a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,5 +1,10 @@ 2004-03-14 Morten Welinder + * gtk/gtkfilesystemunix.c (get_parent_dir): Don't turn "/" into + "". + (gtk_file_system_unix_get_folder): Use the same value for lookup + as for insertion. Make sure we have a directory. + * gtk/gtkfilechooserdefault.c (error_dialog): Don't crash on NULL path; don't crash on NULL error. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 0af7fb4ecd..a1fe12811a 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,5 +1,10 @@ 2004-03-14 Morten Welinder + * gtk/gtkfilesystemunix.c (get_parent_dir): Don't turn "/" into + "". + (gtk_file_system_unix_get_folder): Use the same value for lookup + as for insertion. Make sure we have a directory. + * gtk/gtkfilechooserdefault.c (error_dialog): Don't crash on NULL path; don't crash on NULL error. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 0af7fb4ecd..a1fe12811a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,5 +1,10 @@ 2004-03-14 Morten Welinder + * gtk/gtkfilesystemunix.c (get_parent_dir): Don't turn "/" into + "". + (gtk_file_system_unix_get_folder): Use the same value for lookup + as for insertion. Make sure we have a directory. + * gtk/gtkfilechooserdefault.c (error_dialog): Don't crash on NULL path; don't crash on NULL error. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 0af7fb4ecd..a1fe12811a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,5 +1,10 @@ 2004-03-14 Morten Welinder + * gtk/gtkfilesystemunix.c (get_parent_dir): Don't turn "/" into + "". + (gtk_file_system_unix_get_folder): Use the same value for lookup + as for insertion. Make sure we have a directory. + * gtk/gtkfilechooserdefault.c (error_dialog): Don't crash on NULL path; don't crash on NULL error. diff --git a/gtk/gtkfilesystemunix.c b/gtk/gtkfilesystemunix.c index 5bf8c9accc..a479eb4b91 100644 --- a/gtk/gtkfilesystemunix.c +++ b/gtk/gtkfilesystemunix.c @@ -345,6 +345,7 @@ gtk_file_system_unix_get_folder (GtkFileSystem *file_system, GtkFileSystemUnix *system_unix; GtkFileFolderUnix *folder_unix; const char *filename; + char *filename_copy; system_unix = GTK_FILE_SYSTEM_UNIX (file_system); @@ -352,18 +353,35 @@ gtk_file_system_unix_get_folder (GtkFileSystem *file_system, g_return_val_if_fail (filename != NULL, NULL); g_return_val_if_fail (g_path_is_absolute (filename), NULL); - folder_unix = g_hash_table_lookup (system_unix->folder_hash, filename); + filename_copy = remove_trailing_slash (filename); + folder_unix = g_hash_table_lookup (system_unix->folder_hash, filename_copy); if (folder_unix) { + g_free (filename_copy); folder_unix->types |= types; return g_object_ref (folder_unix); } else { + if (!g_file_test (filename, G_FILE_TEST_IS_DIR)) + { + int save_errno = errno; + gchar *filename_utf8 = g_filename_to_utf8 (filename, -1, NULL, NULL, NULL); + g_set_error (error, + GTK_FILE_SYSTEM_ERROR, + GTK_FILE_SYSTEM_ERROR_NONEXISTENT, + _("error getting information for '%s': %s"), + filename_utf8 ? filename_utf8 : "???", + g_strerror (save_errno)); + g_free (filename_utf8); + g_free (filename_copy); + return NULL; + } + folder_unix = g_object_new (GTK_TYPE_FILE_FOLDER_UNIX, NULL); folder_unix->system_unix = system_unix; - folder_unix->filename = remove_trailing_slash (filename); + folder_unix->filename = filename_copy; folder_unix->types = types; g_hash_table_insert (system_unix->folder_hash, folder_unix->filename, folder_unix); @@ -615,7 +633,7 @@ get_parent_dir (const char *filename) len = strlen (filename); /* Ignore trailing slashes */ - if (filename[len - 1] == '/') + if (len > 1 && filename[len - 1] == '/') { char *tmp, *parent; -- 2.30.2